package com.com.day05;

import javax.swing.*;
import java.awt.*;

public class Ball {
    //属性：坐标x，y 半径
    //xy轴坐标
    public  int x,y;
    //半径
    public int r;
    //类型0子弹，1敌机
    public int type;
    //运动方向0向上，1向下
    public int ori;
//图片：通过图片地址获取图片
    //子弹图片
    public Image img_fire=new ImageIcon("fire.gif").getImage();
    //敌机图片
    public Image img_ori=new ImageIcon("foe.gif").getImage();
    //敌机子弹图
    public  Image img_fire1=new ImageIcon("fire1.png").getImage();
    //英雄图
    public Image img_hero=new ImageIcon("hero.gif").getImage();
    //声明静态常量
    //子弹
    public static final int FIRE=0;
    //敌机
    public static final int FOE=1;
    //敌机子弹
    public  static final int FIRE1=2;
    //英雄
    public static  final  int HERO=3;


    //向上
    public  static  final int UP=0;
    //向下
    public static final int DOWN=1;

    public Ball(int x, int y, int r, int type, int ori) {
        this.x = x;
        this.y = y;
        this.r = r;
        this.type = type;
        this.ori = ori;
    }

    public Ball() {

    }

    /*
        画的方法：把敌机和子弹画出来
        Graphics g画笔
        通过类型判断：子弹（FIRE），敌机（FOE)
         */
    public void draw(Graphics g){
        switch (type){
            //画子弹
            case FIRE:
                g.drawImage(img_fire,x,y,r*2,r*2,null);
                break;
                //画敌机
            case FOE:
                g.drawImage(img_ori,x+5,y,r*2,r*2,null);

                break;
                //画敌机子弹
            case FIRE1:
                g.drawImage(img_fire1,x,y,r*2,r*2,null);

                break;
            //画英雄
            case HERO:
                g.drawImage(img_hero,x,y,r*2,r*2,null);

                break;
        }
    }
    /*
    通过方向判断敌机 ，子弹移动
    UP向上，DOWN向下
    通过改变y轴实现纵向移动
     */
    public void move(){
       switch (ori){
           case UP:
               y=y-10;
               break;
           case DOWN:
               y+=3;
               break;
       }

    }
    /*
    相遇方法
    判断相遇
    根据子弹和敌机的距离：坐标与半径的对比
    两点间的距离，x轴距离的平方+y轴距离的平方之和的平方根
    半径之和，两个球的半径之和
    如果相遇返回true，没有则返回false
     */
    public boolean isTouch(Ball ball){
        //第一个球球心的坐标
        int x1=x+r;
        int y1=y+r;
        //第二个球球心的坐标
        int x2=ball.x+ball.r;
        int y2=ball.y+ball.r;
        //第三个球球心坐标
        int x3=ball.x+ball.r;
        int y3=ball.y+ball.r;
        //英雄圆心坐标
        int x4=ball.x+ball.r;
        int y4=ball.y+ball.r;
        //两圆心的距离
       double s=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
        double s2=Math.sqrt((x2-x4)*(x2-x4)+(y2-y4)*(y2-y4));
       double s1=Math.sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4));

        //两者半径之和
        double sr=r+ball.r;

        //判断是否碰撞
        if (s<=sr){
            return true;
        }
        return false;
    }


}
